package stage_1_module_2.code.homework_1;

/****
 * 编程实现以下需求：
定义一个长度为[16][16]的整型二维数组并输入或指定所有位置的元素值，分别实现二维数组中所有行和所有列中所有元素的累加和并打印。
再分别实现二维数组中左上角到右下角和右上角到左下角所有元素的累加和并打印。
 */
/**
 * 解题思路:
 * 1.双重循环创建16×16的二维数组i_a并初始化元素为1
 * 2.定义一个计算数组之和的方法sumA
 * 3.循环打印每行之和即二维数组i_a[i]之和
 * 4.循环打印每列之和即i_a[0][i]...i_a[15][i]之和
 * 5.打印左上对角线之和即i_a[i][i]之和
 * 6.打印右上对角线之和即i_a[i][15-i]之和
 */
public class homework_1 {
    public static void main(final String[] args) {
        final int[][] i_a = new int[16][16]; 
        for(int i=0;i<=15;i++) {
            for (int j=0;j<=15;j++) {
                i_a[i][j] = 1;
                System.out.printf(" "+ i_a[i][j] + " ");
            }
            System.out.printf(" \n");
        }
        System.out.println("打印每行总和======");
        for(int i=0;i<=15;i++) {
            System.out.printf(" %d行之和%d \n",i,sumA(i_a[i]));
        }
        System.out.println("打印每列总和======");
        for(int i=0;i<=15;i++) {
            final int[] t_l = {i_a[0][i],i_a[1][i],i_a[2][i],i_a[3][i],i_a[4][i],i_a[5][i],i_a[6][i],i_a[7][i],
                i_a[8][i],i_a[9][i],i_a[10][i],i_a[11][i],i_a[12][i],i_a[13][i],i_a[14][i],i_a[15][i]
            };
            System.out.printf(" %d列之和%d \n",i,sumA(t_l));
        }
        System.out.println("打印左上对角线总和======");
        final int[] t_l_x = new int[16];
        for (int i=0;i<=15;i++) {
            t_l_x[i] = i_a[i][i];
        }
        System.out.printf("左上对角线之和%d \n",sumA(t_l_x));
        System.out.println("打印右上对角线总和=====");
        final int[] t_r_x = new int[16];
        for (int i=0;i<=15;i++) {
            t_r_x[i] = i_a[i][15-i];
        }
        System.out.printf("右上对角线之和%d \n",sumA(t_r_x));
    }

    public static int sumA(final int[] input) {
        int res = 0;
        for (int i=0;i<input.length;i++) {
            res += input[i];
        }
        return res;
    }
}
